|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||
java.lang.Objectde.bsvrz.dav.daf.main.impl.archive.request.StreamedArchiveRequester
public class StreamedArchiveRequester
Die Objekte dieser Klasse verwalten alle Arten von Anfragen an das Archivsystem, gleichzeitig werden auch alle Antworten vom Archivsystem, die für die
Applikation bestimmt sind, entgegen genommen und in entsprechende Objekte umgewandelt (der Datensatz wird von einem Objekt der Klasse StreamedRequestManager empfangen, aber an den richtigen StreamedArchiveRequester weitergeleitet). Für jede anfragende Applikation wird ein solches Objekt
erzeugt.
| Nested Class Summary | |
|---|---|
(package private) class |
StreamedArchiveRequester.ClientSender
Diese innerClass implementiert das ClientSenderInterface und wird im StreamedArchiveRequester benötigt um ein ClientDavConnection Objekt zu erzeugen. |
| Field Summary | |
|---|---|
private SystemObject |
_archiveSystem
Für welches Archivsystem ist dieser Manager. |
private StreamedArchiveRequester.ClientSender |
_clientSender
|
private ClientDavInterface |
_connection
Stellt die Verbindung zum Archiv dar. |
private DataDescription |
_dataDescriptionSender
|
private static Debug |
_debug
DebugLogger für Debug-Ausgaben |
private short |
_defaultSimulationVariant
Falls keine Simulationsvariante gesetzt wird, dann wird dieser default-Wert benutzt. |
private int |
_indexOfRequest
Jede Anfrage erhält einen eigene Index. |
private List<ArchiveAvailabilityListener> |
_listener
Speichert alle Listener, die benachrichtigt werden, wenn das Archivsystem nicht mehr über den DaV zu erreichen ist |
private Byte |
_lockState
Diese Objekt für synchronized() benötigt, es sperrt den Zugriff auf die Variable _state. |
private int |
_receiveBufferSize
Diese Variable bestimmt die Größe des Empfangspuffers (StreamDemultiplexer). |
private Map |
_requests
Hier sind alle Anfragen gespeichert, als Key wird der Index der Anfrage benutzt und das Archiv von dem die Daten angefordert werden. |
private byte |
_state
Diese Variable wird benutzt um zu prüfen ob es einen Abnehmer für Archivanfragen gibt. |
private SubscriptionArchiveOnlineDataManager |
_subscriptionArchiveOnlineDataManager
|
private Date |
_timeOutArchiveRequest
|
| Constructor Summary | |
|---|---|
StreamedArchiveRequester(ClientDavInterface archiveConnection,
int timeOutArchiveRequest,
SystemObject archiveSystem,
short defaultSimulationVariant)
Dieser Konstruktor erzeugt ein StreamedArchiveRequester Objekt und meldet sich gleichzeitig auf der übergebenen Verbindung als Sender für Anfragen an. |
|
| Method Summary | |
|---|---|
void |
addArchiveAvailabilityListener(ArchiveAvailabilityListener listener)
Das übergebene Objekt listener wird benachrichtigt sobald sich die Erreichbarkeit des Archivsystems
über den Datenverteiler ändert. |
private void |
adviseListener()
Diese Methode benachrichtigt alle Listener, dass sich der Verbindungszustand zum Archivsystem geändert hat. |
(package private) void |
archiveDataResponse(Data data)
Diese Methode leitet die Nutzdaten, die für eine bestimmte Archivanfrage gedacht sind, weiter. |
ArchiveQueryResult |
archiveFileSaverAlignment(int volumeIdTypB)
Beauftragt das Archivsystem seine Informationen zu gespeicherten Daten mit einem Speichermedium Typ B ArchiveFileSaver abzugleichen. |
private void |
archiveFileSaverAlignmentResponse(Data data)
|
private void |
connectionLost()
Die Verbindung zum Archiv ist verloren gegangen. |
(package private) void |
createArchivRequestResultData(ArchiveQueryID archiveRequest,
int messageType,
byte[] dataArray)
Diese Methode erzeugt einen Datensatz, der zum Archiv geschickt werden kann. |
void |
dataReceiver(Data data)
Diese Methode analisiert die Daten und ruft die passenden Methoden auf, die die Daten weiter reichen oder verarbeiten um sie dann weiter zu reichen. |
ArchiveQueryResult |
deleteData(List<ArchiveInformationResult> dataDisposedToDelete,
boolean deleteImmediately)
Beauftragt das Archivsystem die angegebenen Zeitbereiche ohne Rücksicht auf den mit ArchiveRequestManager.increaseDeleteTime(java.util.List festgelegten Wert zu löschen. |
private void |
deleteDataResponse(Data data)
|
ArchiveQueryResult |
deleteDataSimulationVariant(short simulationVariant)
Diese Methode beauftragt das Archivsystem alle Daten, die zu einer bestimmten Simulationsvariante gehören, zu löschen. |
private void |
deletePersistentDataResponse(Data data)
Diese Methode wird aufgerufen, wenn eine Antwort auf einen Löschauftrag vorliegt. |
private Query |
getQuery(int indexOfQuery,
SystemObject archiveReference)
Diese Methode liefert zu einem gegebenen Index, der zu einer Archivanfrage gehört, die dazugehörige Archivanfrage. |
ArchiveQueryResult |
increaseDeleteTime(List<ArchiveInformationResult> requiredData,
long timePeriod)
Beauftragt das Archivsystem den Löschzeitpunkt der angegebenen Zeitbereiche zu verlängern. |
private void |
increaseDeleteTimeResponse(Data data)
|
private void |
intitiateArchiveQueryResponse(Data data)
Das Archiv Antwortet auf die gestellt Archivanfrage. |
boolean |
isArchiveAvailable()
Stellt fest ob das Archivsystem über den Datenverteiler derzeit erreichbar ist. |
private boolean |
isConnectionOk(Date timeOut)
Diese Methode prüft, ob gesendet werden darf. |
void |
removeArchiveAvailabilityListener(ArchiveAvailabilityListener listener)
Das Objekt, das mit ArchiveRequestManager.addArchiveAvailabilityListener(de.bsvrz.dav.daf.main.archive.ArchiveAvailabilityListener) übergeben wurde, wird nicht mehr benachrichtigt sobald
sich die Erreichbarkeit des Archivsystems über den Datenverteiler ändert. |
(package private) void |
removeRequest(Object key)
Diese Methode entfernt eine Archivauftrag aus der Hashtable. |
ArchiveDataQueryResult |
request(ArchiveQueryPriority priority,
ArchiveDataSpecification spec)
Diese Methode stellt eine Anfrage an das Archiv. |
ArchiveDataQueryResult |
request(ArchiveQueryPriority priority,
List<ArchiveDataSpecification> specs)
Diese Methode stellt eine Anfrage an das Archiv. |
ArchiveQueryResult |
requestData(Collection<ArchiveInformationResult> requiredData,
Collection<SystemObject> requestedArchives)
Beauftragt das Archivsystem fehlende Daten von anderen Archivsystemen anzufordern und diese dann als "nachgefordert" zu speichern und bei Archivanfragen zur Verfügung zu stellen. |
ArchiveQueryResult |
requestData(long startTime,
long endTime,
Collection<SystemObject> requestedArchives)
Beauftragt das Archivsystem fehlende Daten von anderen Archivsystemen anzufordern und diese dann als "nachgefordert" zu speichern und bei Archivanfragen zur Verfügung zu stellen. |
private void |
requestDataResponse(Data data)
Diese Methode wird aufgerufen, wenn eine Antwort auf einen Auftrag zum initierten Nachfordern von Daten vorliegt. |
ArchiveInfoQueryResult |
requestInfo(ArchiveDataSpecification spec)
Start einer Archivinformationsanfrage an das Archivsystem. |
ArchiveInfoQueryResult |
requestInfo(List<ArchiveDataSpecification> specs)
Start einer Archivinformationsanfrage an das Archivsystem. |
private void |
requestInfoResponse(Data data)
Diese Methode wird aufgerufen, wenn eine Antwort auf eine Archiveinformationsanfrage vorliegt. |
private void |
restoreDataResponse(Data data)
|
ArchiveQueryResult |
restorePersistentData(List<ArchiveInformationResult> requiredData)
Diese Methode beauftragt das Archivsystem bestimmten Daten, die sich nicht im direkten Zugriff befinden, von der Sicherung wieder in den direkten Zugriff des Archivsystems zu bringen. |
ArchiveQueryResult |
savePersistentData()
Beauftragt das Archivsystem Archivdaten der Sicherung ArchiveFileSaver zu übergeben. |
private void |
savePersistentDataResponse(Data data)
Diese Methode wird aufgerufen, wenn eine Antwort auf einen Speicherauftrag vorliegt. |
(package private) void |
sendTicketToArchive(ArchiveQueryID archiveRequest,
byte[] ticket)
Diese Klasse wird von der Implementation des StreamDemultixplexerDirector benötigt. |
void |
setReceiveBufferSize(int numberOfBytes)
Die Puffergröße (in Byte) des Empfängers auf einen anderen Wert als den default Wert setzen. |
void |
subscribeReceiver(DatasetReceiverInterface receiver,
SystemObject object,
DataDescription dataDescription,
ReceiveOptions options,
HistoryTypeParameter historyType,
long history)
Die Implementation dieser Methode meldet sich als Empfänger von aktuellen Daten an. |
private void |
subscribeSender()
Diese Methode meldet die Archivapplikation als Sender von Archivanfragen/Tickets/Archivaufgaben an. |
void |
unsubscribeReceiver(DatasetReceiverInterface receiver,
SystemObject object,
DataDescription dataDescription)
Die Implementation dieser Methode meldet einen Empfänger ab, der mit der Methode ArchiveRequestManager.subscribeReceiver(de.bsvrz.dav.daf.main.archive.DatasetReceiverInterface, de.bsvrz.dav.daf.main.config.SystemObject, de.bsvrz.dav.daf.main.DataDescription, de.bsvrz.dav.daf.main.ReceiveOptions, de.bsvrz.dav.daf.main.archive.HistoryTypeParameter, long) angemeldet wurde. |
private void |
unsubscribeSender()
Diese Methode meldet den StreamedArchiveRequester als Sender von Archivanfragen/Tickets ab. |
| Methods inherited from class java.lang.Object |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Field Detail |
|---|
private final ClientDavInterface _connection
private byte _state
private final Byte _lockState
synchronized() benötigt, es sperrt den Zugriff auf die Variable _state.
private int _indexOfRequest
private final Map _requests
private int _receiveBufferSize
setReceiveBufferSize(int) gesetzt werden.
private final SystemObject _archiveSystem
private final Date _timeOutArchiveRequest
private static Debug _debug
private StreamedArchiveRequester.ClientSender _clientSender
private DataDescription _dataDescriptionSender
private final short _defaultSimulationVariant
private final SubscriptionArchiveOnlineDataManager _subscriptionArchiveOnlineDataManager
private final List<ArchiveAvailabilityListener> _listener
| Constructor Detail |
|---|
public StreamedArchiveRequester(ClientDavInterface archiveConnection,
int timeOutArchiveRequest,
SystemObject archiveSystem,
short defaultSimulationVariant)
archiveConnection - Eine Verbindung auf der Datensätze verschickt werden sollenarchiveSystem - Das Archiv, für das die Datensätze bestimmt sind| Method Detail |
|---|
public ArchiveDataQueryResult request(ArchiveQueryPriority priority,
List<ArchiveDataSpecification> specs)
throws IllegalStateException
request in interface ArchiveRequestManagerpriority - Mit welcher Priorität soll die Anfrage beantwortet werden (hohe, mittlere, niedrige Priorität)specs - Eine Liste von Objekten, die alle Informationen enthalten, die zur Bearbeitung der Archivanfrage nötig sind. Für jedes Objekt der Liste wird
ein Stream bereitgestellt, der die geforderten Informationen enthält.Wird eine leere Liste übergeben, wird das Objekt, das die Antwort auf
diese Anfrage enthält, ein Array mit Streams zurückgegbene, das ebenfalls leer ist.
specs leer, ist das Array, das die Streams
darstellt, ebenfalls leer.
IllegalStateException - Das Archiv, an das die Anfrage gestellt wurde, kann nicht erreicht werden, die Anfrage wird verworfen.
public ArchiveDataQueryResult request(ArchiveQueryPriority priority,
ArchiveDataSpecification spec)
throws IllegalStateException
request in interface ArchiveRequestManagerpriority - Mit welcher Priorität soll die Anfrage beantwortet werden (hohe, mittlere, niedrige Priorität)spec - Ein Objekt, das alle Informationen enthält, die zur Bearbeitung der Archivanfrage nötig sind.
IllegalStateException - Das Archiv, an das die Anfrage gestellt wurde, kann nicht erreicht werden, die Anfrage wird verworfen.public void setReceiveBufferSize(int numberOfBytes)
setReceiveBufferSize in interface ArchiveRequestManagernumberOfBytes -
private Query getQuery(int indexOfQuery,
SystemObject archiveReference)
int identifiziert. Dieses
int wird dann intern in ein Integer umgewandelt.
indexOfQuery - Index der ArchivanfragearchiveReference - Von welchem Archiv kommt die Antwort
void removeRequest(Object key)
key - key, der zu einem Archivauftrag (delete, restore, save, Archivinformationsanfrage, Archivanfrage) gehört, der entfernt werden sollpublic void dataReceiver(Data data)
data - Datensatz eines Archivsprivate void intitiateArchiveQueryResponse(Data data)
data - Datensatz
void sendTicketToArchive(ArchiveQueryID archiveRequest,
byte[] ticket)
throws DataNotSubscribedException,
SendSubscriptionNotConfirmed
archiveRequest - Mit diesem Objekt kann die Archivanfrage eindeutig identifiziert werdenticket - Ein byte-Array, das kodiert das Ticket für den StreamMultiplexer der Senderapplikation enthält
DataNotSubscribedException - Es sollen Daten ohne Anmeldung auf die Daten verschickt werden
SendSubscriptionNotConfirmed - Es liegt keine positive Sendesteuerung vom Datenverteiler für die zu versendenden Daten vorvoid archiveDataResponse(Data data)
data - Nutzdaten, die vom Archiv geschickt wurden
void createArchivRequestResultData(ArchiveQueryID archiveRequest,
int messageType,
byte[] dataArray)
throws DataNotSubscribedException,
SendSubscriptionNotConfirmed,
IllegalStateException
archiveRequest - Ein Object, das den Index der Anfrage und eine Referenz auf die anfragende Applikation enthältmessageType - Von welchem Typ ist das PaketdataArray - Hier können zusätzliche Daten codiert werden
DataNotSubscribedException - Senden von Datensätzen ohne entsprechende Sendeanmeldung
SendSubscriptionNotConfirmed - Es liegt keine positive Sendesteuerung vom Datenverteiler für die zu versendenden Daten vor
IllegalStateException - Die Verbindng zum Archive wurde abgebrochen, gleichzeitig wird versucht Datenpakete an das Archiv zu verschickenprivate void connectionLost()
private boolean isConnectionOk(Date timeOut)
throws InterruptedException
timeOut - Zeitpunkt, bis zu dem gewartet wird, um eine Verbindung aufzubauen
InterruptedExceptionprivate void unsubscribeSender()
private void subscribeSender()
public ArchiveInfoQueryResult requestInfo(ArchiveDataSpecification spec)
requestInfo in interface ArchiveRequestManagerspec - Spezifikation der Archivdaten zu denen Information gewünscht werden.
public void subscribeReceiver(DatasetReceiverInterface receiver,
SystemObject object,
DataDescription dataDescription,
ReceiveOptions options,
HistoryTypeParameter historyType,
long history)
ArchiveRequestManager
subscribeReceiver in interface ArchiveRequestManagerreceiver - Objekt, das Methoden zur Verfügung stellt um den Strom aus historischen und aktuellen Daten
entgegen zu nehmenobject - System-Objekt für die die spezifizierten Daten anzumelden sinddataDescription - Beschreibende Informationen zu den anzumeldenden Datenoptions - Für die Anmeldung zu verwendende OptionenhistoryType - HistoryTypeParameter.TIME = Der Parameter history bezieht sich auf
einen Zeitraum, der vor den aktuellen Daten liegen soll (in ms);
HistoryTypeParameter.INDEX = Der Parameter history bezieht sich auf
die Anzahl Datensätze, die mindestens vor den aktuellen Daten liegen sollenhistory - Zeitraum der Archivdaten in Millisekunden, die vor den ersten aktuellen Datensätzen liegen
public void unsubscribeReceiver(DatasetReceiverInterface receiver,
SystemObject object,
DataDescription dataDescription)
ArchiveRequestManagerArchiveRequestManager.subscribeReceiver(de.bsvrz.dav.daf.main.archive.DatasetReceiverInterface, de.bsvrz.dav.daf.main.config.SystemObject, de.bsvrz.dav.daf.main.DataDescription, de.bsvrz.dav.daf.main.ReceiveOptions, de.bsvrz.dav.daf.main.archive.HistoryTypeParameter, long) angemeldet wurde.
unsubscribeReceiver in interface ArchiveRequestManagerobject - System-Objekt für die die spezifizierten Daten angemeldet wurdendataDescription - Beschreibende Informationen zu den angemeldeten Datenpublic ArchiveInfoQueryResult requestInfo(List<ArchiveDataSpecification> specs)
requestInfo in interface ArchiveRequestManagerspecs - Liste mit Spezifikationen der Archivdaten zu denen Information gewünscht werden
private void requestInfoResponse(Data data)
data - Archivantwort auf einen Archivinformationsanfragepublic ArchiveQueryResult savePersistentData()
ArchiveRequestManagerArchiveFileSaver zu übergeben.
Eine Applikation ruft diese Methode auf, um alle Archivdaten, die gesichert werden können, zu sichern. Eine
Implementierung dieser Methode sollte ohne zu blockieren ein Objekt zurückliefern über das asynchron auf das
Ergebnis der Anfrage zugegriffen werden kann.
savePersistentData in interface ArchiveRequestManagerprivate void savePersistentDataResponse(Data data)
data - Archivantwort auf Speicherauftrag
public ArchiveQueryResult requestData(Collection<ArchiveInformationResult> requiredData,
Collection<SystemObject> requestedArchives)
ArchiveRequestManager
requestData in interface ArchiveRequestManagerrequiredData - Datenidentifikation(en), die nachgefordert werden sollen. Jede Datenidentifikation
speichert zusätlich den Zeitbereich, in dem Daten zu dieser Datenidentifikation angefordert
werden soll. Es muss mindestens eine Datenidentifikation vorhanden sein.requestedArchives - Archivsystem(e), bei denen Daten angefordert werden. Ist diese Liste leer werden alle
Archivsystem angefragt, die beim automatischen Nachfordern angefragt werden.
public ArchiveQueryResult requestData(long startTime,
long endTime,
Collection<SystemObject> requestedArchives)
ArchiveRequestManager
requestData in interface ArchiveRequestManagerstartTime - Startzeitpunkt, ab dem Daten nachgefordert werdenendTime - Endzeitpunkt, bis zu dem Daten nachgefordert werdenrequestedArchives - Archivsysteme die angefragt werden. Ist die Liste leer werden alle Archivsysteme angefragt,
die beim automatischen Nachfordern angefragt werden
private void requestDataResponse(Data data)
data - Antwort auf den Auftrag zum nachfordern von Datenpublic ArchiveQueryResult restorePersistentData(List<ArchiveInformationResult> requiredData)
restorePersistentData in interface ArchiveRequestManagerrequiredData - Zeitbereiche, die wieder in den direkten Zugriff des Archivsystems gebracht werden sollen
private void restoreDataResponse(Data data)
public ArchiveQueryResult deleteDataSimulationVariant(short simulationVariant)
deleteDataSimulationVariant in interface ArchiveRequestManagersimulationVariant - Simulationsvariante von der alle Daten aus dem Archivsystem entfernt werden sollen
private void deletePersistentDataResponse(Data data)
data - Archivantwort auf Speicherauftrag
public ArchiveQueryResult increaseDeleteTime(List<ArchiveInformationResult> requiredData,
long timePeriod)
ArchiveRequestManager
increaseDeleteTime in interface ArchiveRequestManagerrequiredData - Zeitbereiche, die länger im direkten Zugriff des Archivsystems bleiben sollentimePeriod - Zeitspanne, die die ausgewählten Daten länger im direkten Zugriff des Archivsystem bleiben
sollen (in ms)
private void increaseDeleteTimeResponse(Data data)
public ArchiveQueryResult deleteData(List<ArchiveInformationResult> dataDisposedToDelete,
boolean deleteImmediately)
ArchiveRequestManagerArchiveRequestManager.increaseDeleteTime(java.util.List, long) festgelegten Wert zu löschen. Das Löschen der Zeitbereiche wird dabei in
zwei Varianten unterteilt. In der ersten Variante werden die Zeitbereiche umgehend aus dem direkten Zugriff des
Archivsystems entfernt. In der zweiten Variante werden die Zeitbereiche nur als "zu löschend" markiert, sobald das
"automatische Löschen" des Archivsystems angstoßen wird (dies geschieht zyklisch), werden die Zeitbereiche
entfernt.
Bei allen Löschoperationen, die durch diesen Methodenaufruf ausgelöst werden, muss darauf geachtete werden, dass der
Vorhaltezeitraum der Zeitbereiche abgelaufen sein muss und das die Zeitbereiche gesichert wurden, falls diese
gesichert werden sollten. Wird gegen eine diese Forderungen verstossen, wird der angegebene Zeitbereich nicht
gelöscht.
deleteData in interface ArchiveRequestManagerdataDisposedToDelete - Zeitbereich(e), die gelöscht werden sollendeleteImmediately - true = Variante 1, die Zeitbereiche werden umgehend aus dem direkten Zugriff des
Archivsystems entfernt; false = Variante 2, die Zeitbereiche werden nur als "zu
löschend" markiert und später aus dem direkten Zugriff des Archivsystems entfernt
private void deleteDataResponse(Data data)
public ArchiveQueryResult archiveFileSaverAlignment(int volumeIdTypB)
ArchiveRequestManagerArchiveFileSaver abzugleichen. Dies kann nötig werden, wenn die eindeutigen Identifizierungen
der Speichermedien von Typ B durch die Sicherung geändert wurden (Beispiel: Die Daten wurden vorher auf CD
gespeichert, nun werden die Daten auf DVD gespeichert und die alten Datenbestände auf DVD umkopiert, somit fallen
mehrere CD´s auf eine DVD und die eindeutigen Identifizierungen der CD´s sind nutzlos. Die eindeutigen
Identifizierungen der CD´s wurde aber vom Archivsystem gespeichert und müssen folglich abgeglichen werden).
archiveFileSaverAlignment in interface ArchiveRequestManagervolumeIdTypB - Eindeutige Identifikation eines Speichermediums Typ B
public boolean isArchiveAvailable()
ArchiveRequestManager
isArchiveAvailable in interface ArchiveRequestManagerpublic void addArchiveAvailabilityListener(ArchiveAvailabilityListener listener)
ArchiveRequestManagerlistener wird benachrichtigt sobald sich die Erreichbarkeit des Archivsystems
über den Datenverteiler ändert.
addArchiveAvailabilityListener in interface ArchiveRequestManagerlistener - Objekt, das benutzt wird um Änderungen der Erreichbarkeit des Archivsystems über den Datenverteiler
anzuzeigenpublic void removeArchiveAvailabilityListener(ArchiveAvailabilityListener listener)
ArchiveRequestManagerArchiveRequestManager.addArchiveAvailabilityListener(de.bsvrz.dav.daf.main.archive.ArchiveAvailabilityListener) übergeben wurde, wird nicht mehr benachrichtigt sobald
sich die Erreichbarkeit des Archivsystems über den Datenverteiler ändert.
removeArchiveAvailabilityListener in interface ArchiveRequestManagerlistener - Objekt, das nicht mehr benachrichtigt werden soll, wenn sich die Erreichbarkeit des Archivsystems
über den Datenverteiler ändertprivate void adviseListener()
private void archiveFileSaverAlignmentResponse(Data data)
|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||